﻿using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using Contracts;

namespace CentralService
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri addr = new Uri("http://localhost:8080/ICentralService");
            Type servtype = typeof(CentralService);
            WSDualHttpBinding bind = new WSDualHttpBinding
                                     {
                                         MessageEncoding = WSMessageEncoding.Mtom,
                                         Security = { Mode = WSDualHttpSecurityMode.None },
                                         CloseTimeout = new TimeSpan(00, 00, 10)
                                     };

            try
            {
                ServiceHost svchost = new ServiceHost(servtype);
                ServiceMetadataBehavior smb = svchost.Description.Behaviors.Find<ServiceMetadataBehavior>();
                if (smb != null)
                {
                    smb.HttpGetEnabled = true;
                    smb.HttpGetUrl = addr;

                }
                else
                {
                    Console.WriteLine("vai criar o ServiceMetadataBehavior");
                    smb = new ServiceMetadataBehavior { HttpGetEnabled = true, HttpGetUrl = addr };
                    svchost.Description.Behaviors.Add(smb);
                }


                svchost.AddServiceEndpoint(typeof(ICentralService), bind, addr);
                svchost.Open();

                Console.WriteLine("Serviço de troca de mensagens alojado e iniciado no endereço {0}.\n Prima Enter para terminar.",addr.AbsoluteUri);
                Console.ReadLine();
                svchost.Close();
                Console.WriteLine("Alojamento terminado.");
            }
            catch(Exception e)
            {
                Console.WriteLine("Ocorreu um erro na criação no alojamento do serviço de troca de mensagens.\n {0}.\n Aplicação vai terminar.", e.Message);
            }
            finally
            {
                Console.WriteLine("Prima Enter para fechar.");
                Console.ReadLine();
            }
        }
    }
}
